#ifndef _OCCOMPONENT_H_
#define _OCCOMPONENT_H_

#include "enviroment/object.h"
#include "common/preclude.h"
#include "common/common.h"
#include "common/type.h"

/**
 * 更新系统类型
 * 该类型描述了引擎支持的不同更新系统
 * 不同的系统会有不同的调用频率
 */
enum class UpdateSystemType
{
    // WorldStatic更新类型
    //该类型仅仅是传递场景数据，几乎不会对整个对象做任何更新操作
    WorldStatic,
    // WorldDynamic更新类型
    //该类型会在物理更新时进行更新，仅限在物理系统中更新，其余系统中表现跟WorldStatic一致
    WorldDynamic,
    // RealDynamic更新类型
    //该类型更新频率非常高，适用于场景中运动和实时计算的角色，更新频率在所有系统中都会更新一次
    RealDynamic
}

class Component : public Object
{
public:
    Component(const string& name = TEXT("None")) : m_name(name){};
    virtual ~Component() {}
    //此函数由引擎的运行时系统调用
    //针对每一个组件，会由拥有其组件的Actor实例调用
    //运行时系统会将其分发到合适的更新系统中进行更新
    void update(uint64 tick) {}

    UpdateSystemType m_update_type;

protected:
    u8string m_name;
};

#endif